<h1>Release 0.9 ("Astrakhan")</h1>

<p><b>2015-12-30</b></p>

<p>Hello, long time no see. It's been over a year since our release,
but we have fun stuff to share in our ninth release, named after the
Russian city of <a
href="https://en.wikipedia.org/wiki/Astrakhan">Astrakhan</a>.</p>

<p> For this release we have mainly focused on ease of use and ease of
installation for new users. Recognizing that most users don't have
their own servers, we've been working on making it easier to run
Camlistore on cloud providers. Initially we've targeted the <a
href="https://cloud.google.com/">Google Cloud Platform</a> and <a
href="https://www.scaleway.com/">Scaleway</a>, making sure Camlistore
is well-adapted to those environments. For users wishing to use Google
Cloud Platform, we now provide a web-based launcher for users to
create their own Camlistore instances:</p>

<center>
<div style='font-size:18pt;font-weight:bold;'>
   <a href="https://camlistore.org/launch/">camlistore.org/launch</a>
</div>
</center>

<p>For users wishing to use Scaleway, see our early <a
href="https://github.com/scaleway-community/scaleway-camlistore">scaleway-camlistore
image</a>. Our Scaleway image does not yet use Scaleway's Object Storage service, however,
and puts all Camlistore data on the same volume as the Camlistore code itself, potentially complicating
upgrades. It should be considered an early preview.</p>

<p>Making Camlistore run well on cloud providers required two other
major features: the <code>blobpacked</code> storage backend (for
latency and cost reasons) and <a
href="https://http2.github.io/">HTTP/2</a> (for latency reasons).</p>

<p>The <code>blobpacked</code> storage backend allows faster reading &
serving of files because it stores related blobs contiguously within
larger container blobs (which are also valid zip files) instead of
many small randomly dispersed blobs. See the <a
href="https://camlistore.org/pkg/blobserver/blobpacked">blobpacked
package</a> documentation.</p>

<p>The Go <a href="https://http2.github.io/">HTTP/2</a> implementation
was developed for both Camlistore and the Go standard library and will
be included in Go 1.6. Camlistore 0.9 only requires Go 1.5 but
includes a vendored copy of <a
href="https://godoc.org/golang.org/x/net/http2"><code>golang.org/x/net/http2</code></a>. See
<a href="https://http2.golang.org/">https://http2.golang.org/</a> for
a demo.</p>

<p>
Source release:
</p>

<center>
<div style='font-size:18pt;font-weight:bold;'>
	<a href="https://github.com/camlistore/camlistore/archive/0.9.zip">camlistore0.9-src.zip</a>
</div>
<div style='margin-top:0.5em;'>
Github: <a href="https://github.com/camlistore/camlistore/tree/0.9">github.com/camlistore/camlistore/tree/0.9</a></div>
</center>

<p>
Binary release, new in this release:
</p>

<center>
<div style='font-size:18pt;font-weight:bold;'>
	<a href="/dl/0.9/camlistore0.9-linux.tar.gz">Linux</a>,
	<a href="/dl/0.9/camlistore0.9-darwin.tar.gz">OS X</a>,
	<a href="/dl/0.9/camlistore0.9-windows.zip">Windows</a>
</div>
</center>

<p>Please note that <a href="https://golang.org/dl/">Go 1.5 or newer</a> is now required for this release.</p>

<h2>Release stats</h2>

<p>
33 total committers over 942 commits since <a
href="/doc/release/0.8">Camlistore 0.8</a>, including Aaron Bieber,
Aaron Boodman, Andrew Gerrand, Antonin Amand, Bill Thiede, Brad
Fitzpatrick, David Jack, Emil Hessman, Eric Drechsel, Fabian Reinartz,
Fabian Wickborn, Felix Geller, Gina White, Govert Versluis, Jingguo
Yao, Lindsey Simon, Mario Russo, Mathieu Lonjaret, Matthieu
Rakotojaona, Patrick Mezard, Robert Kroeger, Salman Aljammaz, Salmān
Aljammāz, Steven L. Speek, Tamás Gulácsi, Will Norris.
</p>

<p>Thank you!</p>

<h2>Changes in 0.9</h2>

<h3>Android</h3>
<ul>
	<li>Restrict upload by WiFI SSID.</li>
</ul>

<h3>Camget</h3>
<ul>
	<li>Do not fetch file if already exists on local disk.</li>
</ul>

<h3>Camput</h3>
<ul>
	<li>New option for the <code>share</code> command: <code>-search</code>.</li>
	<li>Detect and warn when using the wrong GPG key.</li>
	<li>New option for the <code>file</code> command: <code>-contents_only</code>.</li>
	<li>The <code>init</code> command can now initialize the client configuration automatically from the server (using the server's <code>/help/</code> handler).</li>
</ul>

<h3>Camtool</h3>
<ul>
	<li>New <code>makestatic</code> command.</li>
	<li>New <code>packblobs</code> command.</li>
	<li>New option for <code>search</code> command: </code>-rawquery</code>.</li>
</ul>

<h3>Cammount</h3>
<ul>
	<li>Use VolumeName on OS X.</li>
</ul>

<h3>Devcam</h3>
<ul>
	<li>Detect and warn when outdated.</li>
	<li>New <code>hook</code> command to install and run git hooks. The only currently available hook is <code>pre-commit</code>, which runs gofmt and checks for trailing whitespace.</li>
	<li>New option for <code>server</code> command: <code>-wipecache</code>.</li>
	<li>New option for <code>server</code> command: <code>-memindex</code>.</li>
</ul>

<h3>Deploy</h3>
<ul>
	<li>Launcher to help deploy Camlistore on Google Cloud Platform.</li>
</ul>

<h3>Docker</h3>
<ul>
	<li><code>misc/docker/dock.go</code>: new program to generate a docker image for camlistored, as well as binaries in isolation.</li>
</ul>

<h3>Genfileembed</h3>
<ul>
	<li>New flag to generate build tags.</li>
</ul>

<h3>Images</h3>
<ul>
	<li>Optional faster resizing with djpeg (if available).</li>
	<li>Support for tiff decoding.</li>
	<li>Use <a href="https://godoc.org/golang.org/x/image/draw">golang.org/x/image/draw</a> for YCbCr resizing.</li>
</ul>

<h3>Importers</h3>
<ul>
	<li>New importer: pinboard.</li>
</ul>

<h3>Indexer</h3>
<ul>
	<li>Improved MySQL connection handling (switch to <code>go-mysql-driver</code>).</li>
	<li>New sorted implementation: <a href="https://github.com/syndtr/goleveldb">LevelDB</a>. It is now the default index storage in the server configuration that is generated when no configuration file exists.</li>
	<li>Out of order reindexing finished/fixed.</li>
	<li>When indexing from images: always try a small prefix buffer first, then read full file if needed.</li>
	<li>Defined a (large) limit on key and value size for all sorted implementations.</li>
	<li>The wholeRef of a file is always indexed, for faster file stats everywhere.</li>
	<li>RDBMS-specific placeholder replacements (and table name replacements) are now cached.</li>
</ul>

<h3>Misc performance changes, bug fixes, clean-ups, etc.</h3>
<ul>
	<li><code>HTTP/2</code></li>
	<li>make.go: improvements, refactoring, and cleanup.</li>
	<li>Migration to new third_parties: <code>golang.org/x/oauth2</code>, <code>google.golang.org/cloud</code>, etc.</li>
	<li>goexif: features and fixes, then contributed upstream.</li>
	<li>Server system status is constantly refreshed over websocket.</li>
	<li>Most of the JSON maps (e.g. for server responses) should be gone in favor of annotated structs.</li>
	<li>More robust localhost detection.</li>
	<li>The setup wizard was removed.</li>
</ul>

<h3>Ports</h3>
<ul>
	<li>Solaris: Camlistore should at least build.</li>
	<li>Darwin/386: deprecated, and user is warned about it when trying to build.</li>
</ul>

<h3>Schema</h3>
<ul>
	<li>Cache last blob read when reading files -> major performance optimization.</li>
	<li>File/chunks related changes, often optimizations with blobpacked in mind.</li>
</ul>

<h3>Search</h3>
<ul>
	<li>New "Around" parameter for queries. Introduced to help web UI features.</li>
	<li>New "filename" search predicate.</li>
</ul>

<h3>Storage</h3>
<ul>
	<li>New <code>blobpacked</code> blobserver: keeps related blobs physically contiguous within zip files.</li>
	<li>Many Google Cloud Storage improvements, including using the official <a href="https://godoc.org/google.golang.org/cloud/storage"><code>google.golang.org/cloud/storage</code></a> package almost everywhere.</li>
	<li>New SubFetcher interface.</li>
	<li>New BlobStreamer interface.</li>
	<li>New WholeRefFetcher interface.</li>
	<li>New memory blobserver.</li>
</ul>

<h3>Vendoring</h3>
<ul>
	<li>With the arrival of the <a href="https://golang.org/s/go15vendor">new vendoring mechanism in Go 1.5</a> (on by default in Go 1.6), we started moving our vendored libraries from the <code>third_party</code> directory to the <code>vendor</code> directory (as is the convention for the new mechanism). This means we do not have to modify the import path of the third party packages we use anymore.</li>
	<li>In addition, we also started moving a fair number of the Camlistore packages out of the <a href="https://camlistore.org">camlistore.org</a> namespace, to independent packages under the <a href="https://go4.org">go4.org</a> namespace. The goal is to make those packages more visible and usable as they can be useful to a larger audience.</li>
</ul>

<h3>Travis</h3>
<ul>
	<li>We are now using <a href="https://travis-ci.org/camlistore/camlistore">Travis CI</a>, until we can rewrite our build bot based on the Go buildlet and trybots.</li>
</ul>

<h3>Website</h3>
<ul>
	<li>New launcher to deploy Camlistore on Google Cloud: <a href="https://camlistore.org/launch">https://camlistore.org/launch</a>.</li>
	<li>CONTRIBUTORS are generated from git log.</li>
	<li>Issue tracker has moved to github.</li>
	<li>The <code>camweb</code> binary which runs the camlistore.org website has been updated to run easily on Google Compute Engine and auto-refresh from the Camlistore source tree. This means our website should be more easily updated going forward.</li>
	<li>Markdown is now supported, and some of the static <code>html</code> content has been converted to it.</li>
</ul>

<h3>Web UI</h3>
<ul>
	<li>New style: top search bar, pudgy navigation menu, vertical contextual actions sidebar.</li>
	<li>Simpler URL blobRef format: <code>/ui/<blobref></code>.</li>
	<li>Some new features:</li>
	<ul>
		<li>Improved uploading: context aware (add to an existing set), duplicate detection/prevention, better drop area, show bytes transferred.</li>
		<li>Aspects: generic attributes editor for permanode aspect. New directory aspect.</li>
		<li>Sidebar: mass tagging/deleting.</li>
		<li>Selections state is saved across navigation.</li>
		<li>Download: view original (non-resized) item.</li>
		<li>Videos rendering.</li>
	</ul>
	<li>Pages changes:</li>
	<ul>
		<li>Improved status page, with lots more info, and restart camlistored "button".</li>
		<li>New help page: client tools configuration, and download links.</li>
		<li>New mobile auto-configuration page with QR code.</li>
		<li>New /debug/config page.</li>
	</ul>
	<li>misc:</li>
	<ul>
		<li>Piggy menu shows server errors.</li>
		<li>Left/right navigation restored.</li>
		<li>Better layout on mobile.</li>
		<li>Cleaned out most of the non-React, legacy code.</li>
	</ul>
</ul>

<h3>Wkfs</h3>
<ul>
	<li>New package that provides a filesystem abstraction layer.</li>
</ul>
